package com.wjjun.base.ui.viewmodel

import android.graphics.Color
import android.graphics.Rect
import android.os.Looper
import android.view.View
import androidx.annotation.ColorInt
import androidx.annotation.LayoutRes
import androidx.lifecycle.MutableLiveData
import com.wjjun.base.ui.listener.IViewBinder

/**
 *
 * author : wangjunjun
 * date   : 2022/6/8
 * desc   :
 */
abstract class BaseItemViewModel<T> : BaseViewModel(), IViewBinder {

    protected val COMMON_DIVIDER_HEIGHT = 0.75

    /**
     * 状态数据
     */
    private val data = MutableLiveData<T>()

    /**
     * 设置数据
     */
    fun setData(newData: T) {
        if (newData == data.value) {
            notifyChange()
            return
        }
        if (Looper.myLooper() == Looper.getMainLooper()) {
            data.value = newData!!
        } else {
            data.postValue(newData!!)
        }
    }

    /**
     * 获取数据
     */
    fun getData(): T? {
        return data.value
    }

    /**
     * 获取数据
     */
    fun editData(action: (T?) -> Unit) {
        action(data.value)
        notifyChange()
    }

    /**
     * 布局文件, 如在onListItemBind中重新绑定,则优先使用onListItemBind中的绑定
     *
     * @return item的布局文件
     */
    @LayoutRes
    abstract fun getItemLayoutId(): Int

    /**
     * 网格布局中使用, 表示该item占用的格子数
     *
     * @param maxSpan 一行有maxSpan个格子数
     * @return 该item占用的格子数
     */
    open fun getItemSpanSize(maxSpan: Int): Int {
        return maxSpan
    }

    /**
     * 获取该Item对应的底下分割线高度
     *
     * @param position 当前下标
     * @param maxCount 总数
     * @return 返回Dp值
     */
    open fun getBtmDividerHeight(position: Int, maxCount: Int): Double {
        return 0.0
    }

    /**
     * 获取该Item对应的底下分割线左右的边距
     *
     * @param position 当前下标
     * @param maxCount 总数
     * @return 返回Dp值
     */
    open fun getBtmDividerHorizontalMargin(position: Int, maxCount: Int): Int {
        return 0
    }

    /**
     * 获取分割线颜色
     *
     * @return 默认f6f6f9
     */
    @ColorInt
    open fun getDividerColor(): Int {
        return Color.parseColor("#f6f6f9")
    }

    /**
     * 设置四边的间距
     *
     * @param rect      item的四边间距
     * @param position  位置
     * @param maxCount  item数量
     * @param spanIndex 网格布局中所处的网格位置，第一个网格为0, 最后一个为maxSpan-1
     * @param maxSpan   网格布局中一行的网格数
     */
    open fun setOutRect(rect: Rect?, position: Int, maxCount: Int, spanIndex: Int, maxSpan: Int) {
        //设置每行第一个边距的左边距12dp和最后一个的右边距12dp
//        if( spanIndex == 0 ){
//            rect.left += ScreenUtil.dip2px(12);
//        }else if( spanIndex == maxSpan -1){
//            rect.right += ScreenUtil.dip2px(12);
//        }
    }

    /**
     * 通过该方法获取item的view
     */
    override fun onBindView(view: View) {

    }
}